package vue.panneau3;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import vue.panneau3.panneau3Controleur.EtapePrecedenteSuivanteListener;
import vue.panneau3.util.Util;

class ChoixHorsPointPopupMenu extends JPopupMenu {
     /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
		public ChoixHorsPointPopupMenu (final Representation2D r2D, final List<EtapePrecedenteSuivanteListener> listeDesEcouteurPourPassageEtatPrecedantSuivant) {
			super() ;
			
			JMenuItem mi1 = new JMenuItem("   afficher/masquer la fonction a optimiser",Util.createImageIcon("img/optimal.png")) ;
			JMenuItem mi3 = new JMenuItem("   taille des croix",Util.createImageIcon("img/croix.png")) ;
			JMenuItem mi5 = new JMenuItem("   vitesse de zoom",Util.createImageIcon("img/zoom.png")) ;
			JMenuItem mi2 = new JMenuItem("   afficher/masquer la grille",Util.createImageIcon("img/grille.png")) ;
			JMenuItem mi4 = new JMenuItem("   afficher/masquer le point central rouge",Util.createImageIcon("img/pointRouge.png")) ;
			JMenuItem mi6 = new JMenuItem("   passer a l'etape suivante",Util.createImageIcon("img/suivant.png")) ;
			JMenuItem mi7 = new JMenuItem("   passer a l'etape précédente",Util.createImageIcon("img/precedant.png")) ;
			JMenuItem mi8 = new JMenuItem("   changer la fonction a optimiser",Util.createImageIcon("img/optimalEdit.png")) ;
			JMenuItem mi9 = new JMenuItem("   lancer la resolution",Util.createImageIcon("img/executer.png")) ;
			
			
			this.add(mi1) ;
			this.add(mi3) ;
			this.add(mi5) ;
			this.add(mi2) ;
			this.add(mi4) ;
			this.add(mi6) ;
			this.add(mi7) ;
			this.add(mi8) ;
			this.add(mi9) ;
			
			mi1.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					r2D.afficherMasquerLaFonctionAOpimiser() ;
					r2D.repaint() ;
				}}) ;
			mi3.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					 Object[] possibleValues = {  "0.1", "0.5", "1", "2", "5", "10", "15" , "20", "50"};
					 Object selectedValue = JOptionPane.showInputDialog(null,

					             "choisir la taille", "taille des croix",

					             JOptionPane.INFORMATION_MESSAGE, null,

					             possibleValues, possibleValues[0]);
					
					 if (selectedValue!=null){
						 r2D.setTailleCroix(new Float((String) selectedValue)) ;				
						 r2D.repaint() ;
					 }
				}}) ;
			mi5.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					 Object[] possibleValues = { "10", "20", "30", "40", "50" , "60", "70", "80" , "90", "100"};
					 Object selectedValue = JOptionPane.showInputDialog(null,

					             "choisir la vitesse de zoom", "vitesse de zoom",

					             JOptionPane.INFORMATION_MESSAGE, null,

					             possibleValues, possibleValues[0]);
					
					 if (selectedValue!=null){
						 r2D.setVitesseZoom(new Integer((String) selectedValue)) ;				
						 r2D.repaint() ;
					 }
				}}) ;
			mi2.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					r2D.setAfficherCadrillage(!r2D.isAfficherCadrillage()) ;
					r2D.repaint() ;
				}}) ;
			mi4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				r2D.setAfficherPointRouge(!r2D.isAfficherPointRouge()) ;
				r2D.repaint() ;
			}}) ;
			
			
			
			mi5.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
			         System.setProperty(
			                 "Quaqua.tabLayoutPolicy","wrap"
			              );
			              try {
			                   UIManager.setLookAndFeel(
			                       "ch.randelshofer.quaqua.QuaquaLookAndFeel"
			                   );
			                   SwingUtilities.updateComponentTreeUI(r2D);
			              } catch (Exception e) {
			            	  e.printStackTrace() ;
			              }
				}}) ;
			
			
			
			// etat precedant
			mi6.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.selectionnerEtapeSuivante() ;
					}
				}}) ;

			// etat suivant
			mi7.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.selectionnerEtapePrecedente() ;
					}
				}}) ;

			
			// changer la fonction a optimiser
			mi8.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.changerLaFonctionAOptimiser() ;
					}
				}}) ;

			// lancer la resolution
			mi9.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					for (EtapePrecedenteSuivanteListener listener : listeDesEcouteurPourPassageEtatPrecedantSuivant) {
						listener.relancerLeCalcul() ;
					}
				}}) ;

		}
	
	
	
	
		public void show(Component invoker, int x, int y) {
                /**Dimension de l'�cran */
                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                /** Dimension du Menu popup */
                Dimension popupSize = this.getPreferredSize();
                /** Position en x,y du popup � l'�cran (pour le .show) */
                double xPopupEcran = invoker.getLocationOnScreen().getX() + x;
                double yPopupEcran = invoker.getLocationOnScreen().getY() + y;
                
                /** Si le popup d�borde de l'�cran sur la droite on d�cale sur x */
                if ((xPopupEcran + popupSize.getWidth()) > screenSize.getWidth()) {
                        x = x - (int)popupSize.getWidth();
                } 
                
                /** Si le popup d�borde de l'�cran sur le bas on d�cale sur y */
                if ((yPopupEcran + popupSize.getHeight()) > screenSize.getHeight()) {
                        y = y - (int)popupSize.getHeight();
                } 
                
                /** On affiche le popup � l'endroit judicieusement calcul� :) */
                super.show(invoker, x, y);
                
        } 
}